#!/bin/sh
#
# umountfs	Turn off swap and unmount all local filesystems.
#

PATH=/sbin:/bin:/usr/sbin:/usr/bin

# Ensure /proc is mounted
test -r /proc/mounts || mount -t proc proc /proc

echo "Deactivating swap..."
swapoff -a

# Sleep give epg time to save 
sleep 5

# We leave /proc mounted, the umount of /dev/devpts seems to fail
# quite frequently, the busybox umount apparently gives up at the
# first failure, so it is necessary to go file system by file
# system.  It is necessary to go backward in the /proc list, because
# later things may have been mounted on earlier mounts.
unmount() {
	local dev mp type opts
	if read dev mp type opts
	then
		# recurse - unmount later items
		unmount
		# skip / and needed virtual filesystems
		case "$mp" in
		/|/dev|/proc|/sys) return 0;;
		esac
		# then unmount this, if possible, otherwise make
		# it read-only
		umount -f -r "$mp"
	fi
}

echo "Unmounting local filesystems..."
unmount </proc/mounts

mount -o remount,ro /

# sync to flush pending writes for loop-mounted file system.
sync

# Add an extra delay of 5 sec to make sure even a problematic HDD has enough time to go to park-position.
if [ "$RUNLEVEL" = "0" ]; then
  ROOTDEV=$(awk '$2 == "/" { print $1 }' /proc/mounts | sed 's/[0-9]$//')
  for dev in /dev/sd?; do
    if [ "$dev" != "$ROOTDEV" ]; then
      echo "Stopping $dev..."
      sdparm --command=stop "$dev"
    else
      echo "Skipping root device $dev"
    fi
  done

  sleep 5
fi
echo "umountfs Good Bye..."
exit 0
